package Testdmo4;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:周次煜
 * Date: 2024-03-15
 * Time：10:44
 */



// Dog.java
// class Dog{
//    public String name;
//    int age;
//    float weight;
//    public void eat(){
//        System.out.println(name + "正在吃饭");
//    }
//    public void sleep(){
//        System.out.println(name + "正在睡觉");
//    }
//    void Bark(){
//
//        System.out.println(name + "汪汪汪~~~");
//    }
//}
//
//
//// Cat.Java
//class Cat{
//    String name;
//    int age;
//    float weight;
//    public void eat(){
//        System.out.println(name + "正在吃饭");
//    }
//    public void sleep()
//    {
//        System.out.println(name + "正在睡觉");
//    }
//    void mew(){
//        System.out.println(name + "喵喵喵~~~");
//    }
//}



//// Animal.java
//class Animal{
//    String name;
//    int age;
//    public void eat(){
//        System.out.println(name + "正在吃饭");
//    }
//    public void sleep(){
//        System.out.println(name + "正在睡觉");
//    }
//}
//// Dog.java
//class Dog extends Animal{
//    void bark(){
//        System.out.println(name + "汪汪汪~~~");
//    }
//}
//
//
//class Cat extends Animal{
//
//
//    void mew(){
//        System.out.println(name + "喵喵喵~~~");
//    }
//}
//
//
//class Test {
//    public static void main(String[] args) {
//            Cat cat=new Cat();
//            cat.name="小喵";
//        cat.sleep();
//
//        Dog dog=new Dog();
//        dog.name="阿黄";
//        dog.bark();
//    }
//}


// class Base {
//    int a;
//    int b;
//    int c;
//}
///////////////////////////////////////////////////////////////////
// class Derived extends Base{
//    int a; // 与父类中成员a同名，且类型相同
//    char b; // 与父类中成员b同名，但类型不同
//    public void method(){
//        a = 100; // 访问父类继承的a，还是子类自己新增的a？
//        b = 101; // 访问父类继承的b，还是子类自己新增的b?
//        c = 102; // 子类没有c，访问的肯定是从父类继承下来的c
//// d = 103; // 编译失败，因为父类和子类都没有定义成员变量b
//    }
//}
//
//
//class Test {
//    public static void main(String[] args) {
//        Derived derived=new Derived();
//        derived.method();
//        System.out.println(derived.a);
//        System.out.println(derived.b);
//        System.out.println(derived.c);
//    }
//}



//class Base {
//    public void methodA(){
//        System.out.println("Base中的methodA()");
//    }
//}
//class Derived extends Base{
//    public void methodB(){
//        System.out.println("Derived中的methodB()方法");
//    }
//    public void methodC(){
//        methodB(); // 访问子类自己的methodB()
//        methodA(); // 访问父类继承的methodA()
//// methodD(); // 编译失败，在整个继承体系中没有发现方法methodD()
//    }
//}
//
//class Test {
//    public static void main(String[] args) {
//        Derived derived=new Derived();
//        derived.methodA();
//        derived.methodB();
//        derived.methodC();
//    }
//}


// class Base {
//    public void methodA(){
//        System.out.println("Base中的methodA()");
//    }
//    public void methodB(){
//        System.out.println("Base中的methodB()");
//    }
//}
// class Derived extends Base{
//    public void methodA(int a) {
//        System.out.println("Derived中的method(int)方法");
//    }
//    public void methodB(){
//        System.out.println("Derived中的methodB()方法");
//    }
//    public void methodC(){
//        methodA(); // 没有传参，访问父类中的methodA()
//        methodA(20); // 传递int参数，访问子类中的methodA(int)
//        methodB(); // 直接访问，则永远访问到的都是子类中的methodB()，基类的无法访问到
//    }
//}



// class Base {
//    int a;
//    int b;
//    public void methodA(){
//        System.out.println("Base中的methodA()");
//    }
//    public void methodB(){
//        System.out.println("Base中的methodB()");
//    }
//}
//
// class Derived extends Base{
//    int a; // 与父类中成员变量同名且类型相同
//    char b; // 与父类中成员变量同名但类型不同
//    // 与父类中methodA()构成重载
//    public void methodA(int a) {
//        System.out.println("Derived中的method()方法");
//    }
//
//    // 与基类中methodB()构成重写(即原型一致，重写下一章详细介绍)
//    public void methodB(){
//        System.out.println("Derived中的methodB()方法");
//    }
//
//    public void methodC(){
//
//        // 对于同名的成员变量，直接访问时，访问的都是子类的
//        a = 100; // 等价于： this.a = 100;
//        b = 101; // 等价于： this.b = 101;
//
//        // 注意：this是当前对象的引用
//        // 访问父类的成员变量时，需要借助super关键字
//        // super是获取到子类对象中从基类继承下来的部分
//        super.a = 200;
//        super.b = 201;
//
//        // 父类和子类中构成重载的方法，直接可以通过参数列表区分清访问父类还是子类方法
//        methodA(); // 没有传参，访问父类中的methodA()
//        methodA(20); // 传递int参数，访问子类中的methodA(int)
//
//        // 如果在子类中要访问重写的基类方法，则需要借助super关键字
//        methodB();
//        // 直接访问，则永远访问到的都是子类中的methodA()，基类的无法访问到
//
//        super.methodB();
//        // 访问基类的methodB()
//    }
//}
//
//class Test {
//    public static void main(String[] args) {
//        Derived derived=new Derived();
//        derived.methodA(100);
//        derived.methodB();
//        derived.methodC();
//    }
//}



// class Base {
//
//     String name;
//    public Base(String name){
//        this.name=name;
//        System.out.println("Base()");
//    }
//
//}
// class Derived extends Base{
//    public Derived(){
//        // super(); // 注意子类构造方法中默认会调用基类的无参构造方法：super(),
//
//        // 用户没有写时,编译器会自动添加，而且super()必须是子类构造方法中第一条语句，
//
//        // 并且只能出现一次
//
//        System.out.println("Derived()");
//    }
//}
// class Test {
//    public static void main(String[] args) {
//        Derived d = new Derived();
//
//    }
//}


class Person {
    public String name;
    public int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("Person：构造方法执行");
    }
    {
        System.out.println("Person：实例代码块执行");
    }
    static {
        System.out.println("Person：静态代码块执行");
    }
}
class Student extends Person{
    public Student(String name,int age) {
        super(name,age);
        System.out.println("Student：构造方法执行");
    }
    {
        System.out.println("Student：实例代码块执行");
    }
    static {
        System.out.println("Student：静态代码块执行");
    }
}
 class TestDemo4 {
    public static void main(String[] args) {
        Student student1 = new Student("张三",19);
        System.out.println("===========================");
        Student student2 = new Student("xiaoxiao",20);

    }

}